package com.hiwan.unions.application;

import android.annotation.TargetApi;
import android.app.Application;
import android.content.Context;
import android.content.Intent;
import android.os.Build;

import com.hiwan.unions.activity.main.LuanchActivity;
import com.umeng.analytics.MobclickAgent;
import com.yanzhenjie.nohttp.Logger;
import com.yanzhenjie.nohttp.NoHttp;
import com.yanzhenjie.nohttp.OkHttpNetworkExecutor;

import cn.jpush.android.api.JPushInterface;


/**
 * Created by llg on 2016/3/15.
 */
public class MyApplication extends Application {
    private static MyApplication mInstance;
    /**
     * 是否是测试环境.
     */
    public static final boolean DEBUG = true;

    @TargetApi(Build.VERSION_CODES.GINGERBREAD)
    @SuppressWarnings("unused")
    @Override
    public void onCreate() {
        super.onCreate();
        mInstance = this;
        if (!DEBUG)
            Thread.setDefaultUncaughtExceptionHandler(restartHandler); // 程序崩溃时触发线程  以下用来捕获程序崩溃异常
        initData();
    }

    @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
    }

    // 创建服务用于捕获崩溃异常
    public Thread.UncaughtExceptionHandler restartHandler = new Thread.UncaughtExceptionHandler() {
        public void uncaughtException(Thread thread, Throwable ex) {
            restartApp();//发生崩溃异常时,重启应用
        }
    };

    public void restartApp() {
        Intent intent = new Intent(mInstance, LuanchActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        mInstance.startActivity(intent);
        android.os.Process.killProcess(android.os.Process.myPid());  //结束进程之前可以把你程序的注销或者退出代码放在这段代码之前
    }

    public static MyApplication getInstance() {
        return mInstance;
    }


    /**
     * 初始化
     */
    private void initData() {
        NoHttp.initialize(this, new NoHttp.Config()
                .setConnectTimeout(60 * 1000) // 全局连接超时时间，单位毫秒。
                .setReadTimeout(60 * 1000) // 全局服务器响应超时时间，单位毫秒。
                .setNetworkExecutor(new OkHttpNetworkExecutor())// 使用OkHttp做网络层。
        );
        Logger.setDebug(DEBUG); // 开启NoHttp调试模式。
        Logger.setTag("Unions"); // 设置NoHttp打印Log的TAG。
        JPushInterface.init(this);            // 初始化 JPush
        JPushInterface.setDebugMode(DEBUG);    // 设置开启日志,发布时请关闭日志
        JPushInterface.setLatestNotificationNumber(this, 2);
        MobclickAgent.setScenarioType(this, MobclickAgent.EScenarioType.E_UM_NORMAL);
        MobclickAgent.setDebugMode(false);
    }
}
